/**
 * - 作者: DoooReyn
 * - 日期: 2023.10.31
 */

/** 全局环境 */
export const G = globalThis || window || self;

/** 自定义全局变量记录 */
const _G: Record<string, boolean> = {};

/** 获取全局变量 */
export function seek(key: string) {
    return (G as any)[key];
}

/** 清理自定义全局变量 */
export function clear() {
    Object.keys(_G).forEach((k) => unmount(k));
}

/** 修改全局变量 */
function modify(key: string, value: any) {
    (G as any)[key] = value;
}

/** 挂载全局变量，只能添加自定义的变量，且不允许重复 */
export function mount(key: string, value: any) {
    if (!contains(key)) {
        _G[key] = true;
        modify(key, value);
        return value;
    }
}

/** 卸载全局变量，只能卸载自定义添加的变量 */
export function unmount(key: string) {
    if (_G[key]) {
        delete _G[key];
        delete (G as any)[key];
    }
}

/** 是否挂载了指定的全局变量 */
export function contains(key: string) {
    return _G[key] || seek(key) !== undefined;
}
